package com.aleyn.router.data

import com.aleyn.router.core.LRouterInterceptor

/**
 * @author : Aleyn
 * @date : 2023/07/30 : 19:16
 *
 * 拦截器数据类，用于存储和比较拦截器的信息。
 *
 * @param priority 优先级，值越小，优先级越高。
 * @param interceptor 拦截器实例。
 */
internal class InterceptorData(
    private val priority: Byte,
    val interceptor: LRouterInterceptor
) : Comparable<InterceptorData> {

    /**
     * 比较两个 InterceptorData 对象。
     * 比较规则：
     * 1. 如果是同一个拦截器实例，则认为相等 (返回 0)。
     * 2. 否则，比较优先级。优先级数值较小的（即优先级更高）会排在前面。
     */
    override fun compareTo(other: InterceptorData): Int {
        return when {
            other.interceptor == this.interceptor -> 0
            other.priority >= this.priority -> 1 // 优先级高的排前面
            else -> -1
        }
    }
}